package com.lz.gamll.feign.product;

import com.lz.gamll.feign.product.fallBack.SkuDetailFeignClientFallBack;
import com.lz.gmall.cart.entity.SkuIdAndPrice;
import com.lz.gmall.common.result.Result;
import com.lz.gmall.common.result.ResultCodeEnum;
import com.lz.gmall.product.entity.SkuInfo;
import com.lz.gmall.product.entity.SpuSaleAttr;
import com.lz.gmall.product.vo.AttrValueConcatVo;
import com.lz.gmall.product.vo.CategoryViewVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

/**
 * @author 郭运龙
 */
@FeignClient(value = "service-product" ,fallback = SkuDetailFeignClientFallBack.class)
public interface SkuDetailFeignClient {


    /**
     * 远程调用接口开发，根据sku的id，获取sku对应的一级，二级，三级产品
     * @param skuId
     * @return
     */
    @GetMapping("/api/inner/product/getCategoryView/{skuId}")
    public Result<CategoryViewVo> getCategoryViewBySkuId(@PathVariable("skuId") Long skuId);
    /**
     * 远程调用接口开发，根据sku的id，获取sku的多种信息(SkuInfo)
     * @param skuId
     * @return
     */
    @GetMapping("/api/inner/product/getSkuInfoAndImage/{skuId}")
    public Result<SkuInfo> getSkuInfoAndImageById(@PathVariable("skuId") Long skuId);
    /**
     * 远程调用接口开发,根据sku的id查询skuInfo，从中获取price，因为价格涉及金钱，我们重新查询保证实时性
     * @param skuId
     * @return
     */
    @GetMapping("/api/inner/product/getSkuInfoPrice/{skuId}")
    public Result<SkuInfo> getSkuInfoPriceBySkuId(@PathVariable("skuId") Long skuId);
    /**
     * 远程调用接口开发,根据sku的id,获取spu的销售属性和销售属性值
     * 添加了选中设置
     * @param skuId
     * @return
     */
    @GetMapping("/api/inner/product/getSpuSaleAttrList/{skuId}")
    public Result<List<SpuSaleAttr>> getSpuSaleAttrListBySkuId(@PathVariable("skuId") Long skuId);
    /**
     * 根据skuId，获取spuId,根据spuId获取所有的sku,用于页面的转换
     * @param skuId
     * @return
     */
    @GetMapping("/api/inner/product/getAttrValueConcat/{skuId}")
    public Result<List<AttrValueConcatVo>> getAttrValueConcatBySkuId(@PathVariable("skuId") Long skuId);

    /**
     * 获取所有的商品的skuId，是为了作为分布式缓存使用，存入布隆处理器
     * @return
     */
    @GetMapping("/api/inner/product/getAllStuIdByRpc")
    public Result<List<Long>> getAllStuIdByRpc();

    /**
     * 获取所有商品的价格
     * 在购物车中完成数据库和redis中价格的一致性，自己开发的
     * @return
     */
    @GetMapping("/api/inner/product/getSkuAllPrice")
    public Result<List<SkuIdAndPrice>> getSkuAllPrice();
}
